Introductory Problems / String Reorder

#include <bits/stdc++.h>
using namespace std;

using i8 = int8_t;
using i16 = int16_t;
using i32 = int32_t;
using i64 = int64_t;
using isize = ptrdiff_t;
using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
using usize = size_t;
using f32 = float_t;
using f64 = double_t;

inline constexpr i32 Modulus = 1e9 + 7;

int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    string str;
    cin >> str;

    u32 length = str.length();
    u32 maxFreq = (length + 1) / 2;

    auto freq = vector<u32>(26, 0);
    for (auto ch : str)
    {
        u32 key = ch - 'A';
        freq[key] += 1;

        if (freq[key] > maxFreq)
        {
            cout << -1;
            return 0;
        }
    }

    string answer;
    answer.reserve(length);

    while (answer.length() < length)
    {
        maxFreq = (length - answer.length()) / 2;

        for (u32 key = 0; key < 26; key += 1)
        {
            if (freq[key] > maxFreq)
            {
                answer.push_back(key + 'A');
                freq[key] -= 1;
                break;
            }
        }

        for (u32 key = 0; key < 26; key += 1)
        {
            if (freq[key] == 0)
            {
                continue;
            }

            char ch = key + 'A';

            if (!answer.empty() && ch == answer.back())
            {
                continue;
            }

            answer.push_back(ch);
            freq[key] -= 1;
            break;
        }
    }

    cout << answer;

    return 0;
}